package Z.dailyExercise.May;

import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class _49字母异位词分组 {
    List<List<String>> res = new ArrayList<>();

    public List<List<String>> groupAnagrams(String[] strs) {
        for (String s:strs) {
            judge(s);
        }
        return res;

    }
    public void judge(String s){
        boolean add = false;
        for (List<String> list:res){
            if ((s.length()!=list.get(0).length())){
                continue;
            }
            if (sort(s).equals(sort(list.get(0)))){
                list.add(s);
                add = true;
                break;
            }

        }
        if (!add){
            List<String> newLs = new ArrayList<>();
            newLs.add(s);
            res.add(new ArrayList<>(newLs));
        }
    }
    //进行排序匹配
    public String sort(String str){
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }

    /**
     * 题解：使用hashmap key为排序之后的string value为list
     * 1、此题可以很好锻炼字符串的基本功和hash表的使用
     * 2、如何对一个字符串进行排序？
     * 2.1、将字符串转为字符数组
     * 2.2、调用Arrays.sort() 对字符数组进行排序
     * 2.3、调用new String() 将字符数组转为字符串
     * 3、此题关键点在于定义一个值为列表的hashmap
     * 4、还需要对hm.values()api熟悉
     *
     */
    public List<List<String>> groupAnagrams1(String[] strs) {
        HashMap<String,List<String>> map = new HashMap<>();
        for (String s:strs){
            char[] ch = s.toCharArray();
            Arrays.sort(ch);
            String change = new String(ch);

            List<String> ls = map.getOrDefault(change,new ArrayList<>());
            ls.add(s);
            map.put(change,ls);
        }

        return new ArrayList<>(map.values());
    }


}
